// 生成二维码页面 - iOS风格 - 混合生成版本（服务器端+本地生成）
const apiService = require('../../utils/api-service.js');
const MessageUtil = require('../../utils/message-util.js');
const drawQrcode = require('../../utils/qrcode.js');


Page({
  data: {
    // 输入内容
    inputContent: '',
    batchContent: '',
    batchMode: false,
    batchLines: 0,
    
    // 二维码类型
    qrType: 'standard',
    
    // 美化选项
    foregroundColor: '#000000',
    backgroundColor: '#ffffff',
    qrSize: 300,
    
    // 生成状态
    generating: false,
    
    // 输入限制
    maxLength: 1000,
    maxBatchLength: 5000,
    
    // 离线模式状态
    isOfflineMode: false
  },

  onLoad(options) {
    if (options.type) {
      this.setData({
        qrType: options.type
      });
    }
    
    // 检查离线模式
    this.checkOfflineMode();
  },

  onShow() {
    // 页面显示时重新检查离线状态
    this.checkOfflineMode();
  },

  // 检查离线模式状态
  checkOfflineMode() {
    try {
      const app = getApp();
      const isOffline = app.isOfflineMode();
      
      this.setData({
        isOfflineMode: isOffline
      });
      
      console.log('二维码生成页面 - 离线模式状态:', isOffline);
    } catch (error) {
      console.error('检查离线模式失败:', error);
      this.setData({
        isOfflineMode: false
      });
    }
  },

  // 切换批量模式
  toggleBatchMode() {
    const newBatchMode = !this.data.batchMode;
    this.setData({
      batchMode: newBatchMode
    });
    
    // 清空输入内容
    if (newBatchMode) {
      this.setData({
        batchContent: '',
        batchLines: 0
      });
    } else {
      this.setData({
        inputContent: ''
      });
    }
  },

  // 单个输入变化
  onInputChange(e) {
    this.setData({
      inputContent: e.detail.value
    });
  },

  // 批量输入变化
  onBatchInputChange: function(e) {
    var content = e.detail.value;
    var lines = content.split('\n').filter(function(line) {
      return line.trim() !== '';
    });
    
    this.setData({
      batchContent: content,
      batchLines: lines.length
    });
  },

  // 切换二维码类型
  switchType: function(e) {
    var type = e.currentTarget.dataset.type;
    
    // 如果在离线模式下选择微型码，给出提示
    if (type === 'micro' && this.data.isOfflineMode) {
      wx.showModal({
        title: '功能限制',
        content: '离线模式下暂不支持微型二维码生成。\n\n微型二维码需要在线服务支持，请等待网络恢复后使用。',
        confirmText: '知道了',
        showCancel: false
      });
      return;
    }
    
    // 根据类型设置不同的输入限制
    var maxLength, maxBatchLength;
    if (type === 'micro') {
      // 微型码容量较小 (Micro QR Code 最大支持24个字符)
      maxLength = 24;  // Micro QR Code 最大容量
      maxBatchLength = 1200; // 50 * 24
      
      // 显示 Micro QR Code 说明
      wx.showModal({
        title: 'Micro QR Code 说明',
        content: 'Micro QR Code 是更小的二维码格式，但容量有限：\n• 最多支持24个字符\n• 适合简短文本、数字\n• 扫描距离较近\n• 部分扫码器可能不支持',
        confirmText: '我知道了',
        showCancel: false
      });
    } else {
      // 标准码容量较大
      maxLength = 1000;
      maxBatchLength = 5000;
    }
    
    this.setData({
      qrType: type,
      maxLength: maxLength,
      maxBatchLength: maxBatchLength
    });
  },

  // 选择颜色
  selectColor: function(e) {
    var type = e.currentTarget.dataset.type;
    var color = e.currentTarget.dataset.color;
    if (type === 'foreground') {
      this.setData({
        foregroundColor: color
      });
    } else if (type === 'background') {
      this.setData({
        backgroundColor: color
      });
    }
  },

  // 选择尺寸
  selectSize: function(e) {
    var size = parseInt(e.currentTarget.dataset.size);
    this.setData({
      qrSize: size
    });
  },

  // 生成二维码
  generateQR: function() {
    if (this.data.generating) return;

    // 检查离线模式和微型码的组合
    if (this.data.isOfflineMode && this.data.qrType === 'micro') {
      wx.showModal({
        title: '功能限制',
        content: '离线模式下暂不支持微型二维码生成。\n\n您可以：\n• 切换为标准二维码\n• 或等待网络恢复后使用微型二维码',
        confirmText: '切换标准码',
        cancelText: '取消',
        success: (res) => {
          if (res.confirm) {
            // 用户选择切换为标准二维码
            this.setData({
              qrType: 'standard',
              maxLength: 1000,
              maxBatchLength: 5000
            });
            
            wx.showToast({
              title: '已切换为标准二维码',
              icon: 'success',
              duration: 1500
            });
          }
        }
      });
      return;
    }

    // 验证输入
    if (this.data.batchMode) {
      if (!this.data.batchContent.trim()) {
        wx.showToast({
          title: '请输入批量内容',
          icon: 'none'
        });
        return;
      }
      
      var lines = this.data.batchContent.split('\n').filter(function(line) {
        return line.trim() !== '';
      });
      if (lines.length === 0) {
        wx.showToast({
          title: '请输入有效内容',
          icon: 'none'
        });
        return;
      }
      
      if (lines.length > 50) {
        wx.showToast({
          title: '批量生成最多50个',
          icon: 'none'
        });
        return;
      }
      
      // 检查微型码的单行长度限制
      if (this.data.qrType === 'micro') {
        var longLine = lines.find(function(line) {
          return line.length > 24;
        });
        if (longLine) {
          wx.showToast({
            title: 'Micro QR Code 每行最多24个字符',
            icon: 'none'
          });
          return;
        }
      }
    } else {
      if (!this.data.inputContent.trim()) {
        wx.showToast({
          title: '请输入内容',
          icon: 'none'
        });
        return;
      }
    }

    // 开始生成
    this.setData({ generating: true });

    var self = this;
    
    // 统一跳转到结果页面，由结果页面根据离线状态选择生成方式
    var generateData = {
      content: this.data.batchMode ? this.data.batchContent : this.data.inputContent,
      type: this.data.qrType,
      foregroundColor: this.data.foregroundColor,
      backgroundColor: this.data.backgroundColor,
      size: this.data.qrSize,
      batchMode: this.data.batchMode
    };

    // 保存生成历史
    this.saveGenerateHistory(generateData);

    // 跳转到结果页面
    var dataParam = encodeURIComponent(JSON.stringify(generateData));
    wx.navigateTo({
      url: '/pages/generate-result/generate-result?data=' + dataParam,
      success: function() {
        self.setData({ generating: false });
      },
      fail: function() {
        self.setData({ generating: false });
      }
    });
  },



  // 使用服务器端生成
  generateWithServer: async function() {
    try {
      const content = this.data.batchMode ? 
        this.data.batchContent.split('\n').filter(line => line.trim()) : 
        this.data.inputContent;

      const params = {
        codeType: 'qrcode',
        subType: this.data.qrType,
        content: content,
        batchMode: this.data.batchMode,
        options: {
          foregroundColor: this.data.foregroundColor,
          backgroundColor: this.data.backgroundColor,
          size: this.data.qrSize
        }
      };

      // 调用API服务
      const response = await apiService.generateCode(params);
      
      if (this.data.batchMode) {
        // 批量生成，保存压缩包
        const saveResult = await apiService.saveBatchResult(response.data);
        return {
          isBatch: true,
          filePath: saveResult.path,
          fileName: saveResult.fileName
        };
      } else {
        // 单个生成，保存图片
        const saveResult = await apiService.saveImageToAlbum(response.data);
        return {
          isBatch: false,
          filePath: saveResult.path
        };
      }
    } catch (error) {
      throw error;
    }
  },

  // 模拟生成过程
  simulateGeneration: function() {
    return new Promise(function(resolve) {
      setTimeout(function() {
        resolve();
      }, 1500); // 模拟1.5秒生成时间
    });
  },

  // 保存生成历史
  saveGenerateHistory: function(params) {
    const historyManager = require('../../utils/history-manager.js');
    historyManager.saveGenerateHistory(params);
  },



  // 页面分享
  onShareAppMessage() {
    return {
      title: '小籽二维码 - 生成二维码',
      path: '/pages/generate-qr/generate-qr'
    };
  }
}); 